" Vim syntax file
" Language:    Gambit Journal File
" Maintainer:  Huys  <huys03@gmail.com>
" Last Change: Mar 20, 2009
" Version:     0.1
" URL:         vim-kit
"
"
"  Options:

if version < 600
  syntax clear
elseif exists("b:current_syntax")
  finish
endif

if version >= 600
 setlocal iskeyword=42,43,45,47-58,60-62,64-90,97-122,_
else
 set iskeyword=42,43,45,47-58,60-62,64-90,97-122,_
endif

" Clusters
"syn cluster             lispAtomCluster          contains=lispAtomBarSymbol,lispAtomList,lispAtomNmbr0,lispComment,lispDecl,lispFunc,lispLeadWhite

"syn cluster             lispListCluster          contains=lispAtom,lispAtomBarSymbol,lispAtomMark,lispBQList,lispBarSymbol,lispComment,lispConcat,lispDecl,lispFunc,lispKey,lispList,lispNumber,lispSpecial,lispSymbol,lispVar,lispLeadWhite

" Lists
"syn match             lispSymbol              contained               ![^()'`,"; \t]\+!
"syn match             lispBarSymbol              contained               !|..\{-}|!
"if exists("lisp_instring")
" syn region             lispList              matchgroup=Delimiter start="(" skip="|.\{-}|"                matchgroup=Delimiter end=")" contains=@lispListCluster,lispString,lispInString,lispInStringString
" syn region             lispBQList              matchgroup=PreProc   start="`("  skip="|.\{-}|"            matchgroup=PreProc   end=")" contains=@lispListCluster,lispString,lispInString,lispInStringString
"else
" syn region             lispList              matchgroup=Delimiter start="(" skip="|.\{-}|"                matchgroup=Delimiter end=")" contains=@lispListCluster,lispString
" syn region             lispBQList              matchgroup=PreProc   start="`("  skip="|.\{-}|"            matchgroup=PreProc   end=")" contains=@lispListCluster,lispString
"endif
" Atoms
"syn match             lispAtomMark              "'"
"syn match             lispAtom              "'("me=e-1               contains=lispAtomMark        nextgroup=lispAtomList
"syn match             lispAtom              "'[^ \t()]\+"               contains=lispAtomMark
"syn match             lispAtomBarSymbol          !'|..\{-}|!               contains=lispAtomMark
"syn region             lispAtom              start=+'"+               skip=+\\"+ end=+"+
"syn region             lispAtomList              contained               matchgroup=Special start="("        skip="|.\{-}|" matchgroup=Special end=")"                  contains=@lispAtomCluster,lispString
"syn match             lispAtomNmbr              contained               "\<\d\+"
"syn match             lispLeadWhite              contained               "^\s\+"

" Standard Lisp Functions and Macros
"syn keyword lispFunc         *                  find-method               pprint-indent
"syn keyword lispFunc         **                  find-package               pprint-linear
"syn keyword lispFunc         ***                  find-restart               pprint-logical-block
"syn keyword lispFunc         +                  find-symbol               pprint-newline
"syn keyword lispFunc         ++                  finish-output               pprint-pop
"syn keyword lispFunc         +++                  first                   pprint-tab
"syn keyword lispFunc         -                  fixnum               pprint-tabular
"syn keyword lispFunc         /                  flet                   prin1
syn keyword lispFunc         //                  float                   prin1-to-string
syn keyword lispFunc         ///                  float-digits               princ
syn keyword lispFunc         /=                  float-precision           princ-to-string
syn keyword lispFunc         1+                  float-radix               print
syn keyword lispFunc         1-                  float-sign               print-not-readable
syn keyword lispFunc         <                  floating-point-inexact       print-not-readable-object
syn keyword lispFunc         <=                  floating-point-invalid-operation print-object
syn keyword lispFunc         =                  floating-point-overflow       print-unreadable-object
syn keyword lispFunc         >                  floating-point-underflow       probe-file
syn keyword lispFunc         >=                  floatp               proclaim
syn keyword lispFunc         abort                  floor                   prog
syn keyword lispFunc         abs                  fmakunbound               prog*
syn keyword lispFunc         access                  force-output               prog1
syn keyword lispFunc         acons                  format               prog2
syn keyword lispFunc         acos                  formatter               progn
syn keyword lispFunc         acosh                  fourth               program-error
syn keyword lispFunc         add-method              fresh-line               progv
syn keyword lispFunc         adjoin                  fround               provide
syn keyword lispFunc         adjust-array              ftruncate               psetf
syn keyword lispFunc         adjustable-array-p          ftype                   psetq
syn keyword lispFunc         allocate-instance          funcall               push
syn keyword lispFunc         alpha-char-p              function               pushnew
syn keyword lispFunc         alphanumericp              function-keywords           putprop
syn keyword lispFunc         and                  function-lambda-expression       quote
syn keyword lispFunc         append                  functionp               random
syn keyword lispFunc         apply                  gbitp                   random-state
syn keyword lispFunc         applyhook              gcd                   random-state-p
syn keyword lispFunc         apropos              generic-function           rassoc
syn keyword lispFunc         apropos-list              gensym               rassoc-if
syn keyword lispFunc         aref                  gentemp               rassoc-if-not
syn keyword lispFunc         arithmetic-error          get                   ratio
syn keyword lispFunc         arithmetic-error-operands      get-decoded-time           rational
syn keyword lispFunc         arithmetic-error-operation      get-dispatch-macro-character       rationalize
syn keyword lispFunc         array                  get-internal-real-time       rationalp
syn keyword lispFunc         array-dimension          get-internal-run-time           read
syn keyword lispFunc         array-dimension-limit          get-macro-character           read-byte
syn keyword lispFunc         array-dimensions          get-output-stream-string       read-char
syn keyword lispFunc         array-displacement          get-properties           read-char-no-hang
syn keyword lispFunc         array-element-type          get-setf-expansion           read-delimited-list
syn keyword lispFunc         array-has-fill-pointer-p      get-setf-method           read-eval-print
syn keyword lispFunc         array-in-bounds-p          get-universal-time           read-from-string
syn keyword lispFunc         array-rank              getf                   read-line
syn keyword lispFunc         array-rank-limit          gethash               read-preserving-whitespace
syn keyword lispFunc         array-row-major-index          go                   read-sequence
syn keyword lispFunc         array-total-size          graphic-char-p           reader-error
syn keyword lispFunc         array-total-size-limit          handler-bind               readtable
syn keyword lispFunc         arrayp                  handler-case               readtable-case
syn keyword lispFunc         ash                  hash-table               readtablep
syn keyword lispFunc         asin                  hash-table-count           real
syn keyword lispFunc         asinh                  hash-table-p               realp
syn keyword lispFunc         assert                  hash-table-rehash-size       realpart
syn keyword lispFunc         assoc                  hash-table-rehash-threshold       reduce
syn keyword lispFunc         assoc-if              hash-table-size           reinitialize-instance
syn keyword lispFunc         assoc-if-not              hash-table-test           rem
syn keyword lispFunc         atan                  host-namestring           remf
syn keyword lispFunc         atanh                  identity               remhash
syn keyword lispFunc         atom                  if                   remove
syn keyword lispFunc         base-char              if-exists               remove-duplicates
syn keyword lispFunc         base-string              ignorable               remove-if
syn keyword lispFunc         bignum                  ignore               remove-if-not
syn keyword lispFunc         bit                  ignore-errors               remove-method
syn keyword lispFunc         bit-and              imagpart               remprop
syn keyword lispFunc         bit-andc1              import               rename-file
syn keyword lispFunc         bit-andc2              in-package               rename-package
syn keyword lispFunc         bit-eqv              in-package               replace
syn keyword lispFunc         bit-ior              incf                   require
syn keyword lispFunc         bit-nand              initialize-instance           rest
syn keyword lispFunc         bit-nor              inline               restart
syn keyword lispFunc         bit-not              input-stream-p           restart-bind
syn keyword lispFunc         bit-orc1              inspect               restart-case
syn keyword lispFunc         bit-orc2              int-char               restart-name
syn keyword lispFunc         bit-vector              integer               return
syn keyword lispFunc         bit-vector-p              integer-decode-float           return-from
syn keyword lispFunc         bit-xor              integer-length           revappend
syn keyword lispFunc         block                  integerp               reverse
syn keyword lispFunc         boole                  interactive-stream-p           room
syn keyword lispFunc         boole-1              intern               rotatef
syn keyword lispFunc         boole-2              internal-time-units-per-second   round
syn keyword lispFunc         boole-and              intersection               row-major-aref
syn keyword lispFunc         boole-andc1              invalid-method-error           rplaca
syn keyword lispFunc         boole-andc2              invoke-debugger           rplacd
syn keyword lispFunc         boole-c1              invoke-restart           safety
syn keyword lispFunc         boole-c2              invoke-restart-interactively       satisfies
syn keyword lispFunc         boole-clr              isqrt                   sbit
syn keyword lispFunc         boole-eqv              keyword               scale-float
syn keyword lispFunc         boole-ior              keywordp               schar
syn keyword lispFunc         boole-nand              labels               search
syn keyword lispFunc         boole-nor              lambda               second
syn keyword lispFunc         boole-orc1              lambda-list-keywords           sequence
syn keyword lispFunc         boole-orc2              lambda-parameters-limit       serious-condition
syn keyword lispFunc         boole-set              last                   set
syn keyword lispFunc         boole-xor              lcm                   set-char-bit
syn keyword lispFunc         boolean              ldb                   set-difference
syn keyword lispFunc         both-case-p              ldb-test               set-dispatch-macro-character
syn keyword lispFunc         boundp                  ldiff                   set-exclusive-or
syn keyword lispFunc         break                  least-negative-double-float       set-macro-character
syn keyword lispFunc         broadcast-stream          least-negative-long-float       set-pprint-dispatch
syn keyword lispFunc         broadcast-stream-streams      least-negative-normalized-double-float                set-syntax-from-char
syn keyword lispFunc         built-in-class              least-negative-normalized-long-float                    setf
syn keyword lispFunc         butlast              least-negative-normalized-short-float                    setq
syn keyword lispFunc         byte                  least-negative-normalized-single-float                seventh
syn keyword lispFunc         byte-position              least-negative-short-float       shadow
syn keyword lispFunc         byte-size              least-negative-single-float       shadowing-import
syn keyword lispFunc         call-arguments-limit          least-positive-double-float       shared-initialize
syn keyword lispFunc         call-method              least-positive-long-float       shiftf
syn keyword lispFunc         call-next-method          least-positive-normalized-double-float                short-float
syn keyword lispFunc         capitalize              least-positive-normalized-long-float                    short-float-epsilon
syn keyword lispFunc         car                  least-positive-normalized-short-float                    short-float-negative-epsilon
syn keyword lispFunc         case                  least-positive-normalized-single-float                short-site-name
syn keyword lispFunc         catch                  least-positive-short-float       signal
syn keyword lispFunc         ccase                  least-positive-single-float       signed-byte
syn keyword lispFunc         cdr                  length               signum
syn keyword lispFunc         ceiling              let                   simle-condition
syn keyword lispFunc         cell-error              let*                   simple-array
syn keyword lispFunc         cell-error-name          lisp                   simple-base-string
syn keyword lispFunc         cerror                  lisp-implementation-type       simple-bit-vector
syn keyword lispFunc         change-class              lisp-implementation-version       simple-bit-vector-p
syn keyword lispFunc         char                  list                   simple-condition-format-arguments
syn keyword lispFunc         char-bit              list*                   simple-condition-format-control
syn keyword lispFunc         char-bits              list-all-packages           simple-error
syn keyword lispFunc         char-bits-limit          list-length               simple-string
syn keyword lispFunc         char-code              listen               simple-string-p
syn keyword lispFunc         char-code-limit          listp                   simple-type-error
syn keyword lispFunc         char-control-bit          load                   simple-vector
syn keyword lispFunc         char-downcase              load-logical-pathname-translations                    simple-vector-p
syn keyword lispFunc         char-equal              load-time-value           simple-warning
syn keyword lispFunc         char-font              locally               sin
syn keyword lispFunc         char-font-limit          log                   single-flaot-epsilon
syn keyword lispFunc         char-greaterp              logand               single-float
syn keyword lispFunc         char-hyper-bit              logandc1               single-float-epsilon
syn keyword lispFunc         char-int              logandc2               single-float-negative-epsilon
syn keyword lispFunc         char-lessp              logbitp               sinh
syn keyword lispFunc         char-meta-bit              logcount               sixth
syn keyword lispFunc         char-name              logeqv               sleep
syn keyword lispFunc         char-not-equal              logical-pathname           slot-boundp
syn keyword lispFunc         char-not-greaterp          logical-pathname-translations       slot-exists-p
syn keyword lispFunc         char-not-lessp              logior               slot-makunbound
syn keyword lispFunc         char-super-bit              lognand               slot-missing
syn keyword lispFunc         char-upcase              lognor               slot-unbound
syn keyword lispFunc         char/=                  lognot               slot-value
syn keyword lispFunc         char<                  logorc1               software-type
syn keyword lispFunc         char<=                  logorc2               software-version
syn keyword lispFunc         char=                  logtest               some
syn keyword lispFunc         char>                  logxor               sort
syn keyword lispFunc         char>=                  long-float               space
syn keyword lispFunc         character              long-float-epsilon           special
syn keyword lispFunc         characterp              long-float-negative-epsilon       special-form-p
syn keyword lispFunc         check-type              long-site-name           special-operator-p
syn keyword lispFunc         cis                  loop                   speed
syn keyword lispFunc         class                  loop-finish               sqrt
syn keyword lispFunc         class-name              lower-case-p               stable-sort
syn keyword lispFunc         class-of              machine-instance           standard
syn keyword lispFunc         clear-input              machine-type               standard-char
syn keyword lispFunc         clear-output              machine-version           standard-char-p
syn keyword lispFunc         close                  macro-function           standard-class
syn keyword lispFunc         clrhash              macroexpand               standard-generic-function
syn keyword lispFunc         code-char              macroexpand-1               standard-method
syn keyword lispFunc         coerce                  macroexpand-l               standard-object
syn keyword lispFunc         commonp              macrolet               step
syn keyword lispFunc         compilation-speed          make-array               storage-condition
syn keyword lispFunc         compile              make-array               store-value
syn keyword lispFunc         compile-file              make-broadcast-stream           stream
syn keyword lispFunc         compile-file-pathname          make-char               stream-element-type
syn keyword lispFunc         compiled-function          make-concatenated-stream       stream-error
syn keyword lispFunc         compiled-function-p          make-condition           stream-error-stream
syn keyword lispFunc         compiler-let              make-dispatch-macro-character       stream-external-format
syn keyword lispFunc         compiler-macro              make-echo-stream           streamp
syn keyword lispFunc         compiler-macro-function      make-hash-table           streamup
syn keyword lispFunc         complement              make-instance               string
syn keyword lispFunc         complex              make-instances-obsolete       string-capitalize
syn keyword lispFunc         complexp              make-list               string-char
syn keyword lispFunc         compute-applicable-methods      make-load-form           string-char-p
syn keyword lispFunc         compute-restarts          make-load-form-saving-slots       string-downcase
syn keyword lispFunc         concatenate              make-method               string-equal
syn keyword lispFunc         concatenated-stream          make-package               string-greaterp
syn keyword lispFunc         concatenated-stream-streams      make-pathname               string-left-trim
syn keyword lispFunc         cond                  make-random-state           string-lessp
syn keyword lispFunc         condition              make-sequence               string-not-equal
syn keyword lispFunc         conjugate              make-string               string-not-greaterp
syn keyword lispFunc         cons                  make-string-input-stream       string-not-lessp
syn keyword lispFunc         consp                  make-string-output-stream       string-right-strim
syn keyword lispFunc         constantly              make-symbol               string-right-trim
syn keyword lispFunc         constantp              make-synonym-stream           string-stream
syn keyword lispFunc         continue              make-two-way-stream           string-trim
syn keyword lispFunc         control-error              makunbound               string-upcase
syn keyword lispFunc         copy-alist              map                   string/=
syn keyword lispFunc         copy-list              map-into               string<
syn keyword lispFunc         copy-pprint-dispatch          mapc                   string<=
syn keyword lispFunc         copy-readtable              mapcan               string=
syn keyword lispFunc         copy-seq              mapcar               string>
syn keyword lispFunc         copy-structure              mapcon               string>=
syn keyword lispFunc         copy-symbol              maphash               stringp
syn keyword lispFunc         copy-tree              mapl                   structure
syn keyword lispFunc         cos                  maplist               structure-class
syn keyword lispFunc         cosh                  mask-field               structure-object
syn keyword lispFunc         count                  max                   style-warning
syn keyword lispFunc         count-if              member               sublim
syn keyword lispFunc         count-if-not              member-if               sublis
syn keyword lispFunc         ctypecase              member-if-not               subseq
syn keyword lispFunc         debug                  merge                   subsetp
syn keyword lispFunc         decf                  merge-pathname           subst
syn keyword lispFunc         declaim              merge-pathnames           subst-if
syn keyword lispFunc         declaration              method               subst-if-not
"syn keyword lispFunc         declare              method-combination           substitute
syn keyword lispFunc         decode-float              method-combination-error       substitute-if
syn keyword lispFunc         decode-universal-time          method-qualifiers           substitute-if-not
syn keyword lispFunc         defclass              min                   subtypep
syn keyword lispFunc         defconstant              minusp               svref
syn keyword lispFunc         defgeneric              mismatch               sxhash
syn keyword lispFunc         define-compiler-macro          mod                   symbol
syn keyword lispFunc         define-condition          most-negative-double-float       symbol-function
syn keyword lispFunc         define-method-combination      most-negative-fixnum           symbol-macrolet
syn keyword lispFunc         define-modify-macro          most-negative-long-float       symbol-name
syn keyword lispFunc         define-setf-expander          most-negative-short-float       symbol-package
syn keyword lispFunc         define-setf-method          most-negative-single-float       symbol-plist
syn keyword lispFunc         define-symbol-macro          most-positive-double-float       symbol-value
syn keyword lispFunc         defmacro              most-positive-fixnum           symbolp
syn keyword lispFunc         defmethod              most-positive-long-float       synonym-stream
syn keyword lispFunc         defpackage              most-positive-short-float       synonym-stream-symbol
syn keyword lispFunc         defparameter              most-positive-single-float       sys
syn keyword lispFunc         defsetf              muffle-warning           system
syn keyword lispFunc         defstruct              multiple-value-bind           t
syn keyword lispFunc         deftype              multiple-value-call           tagbody
syn keyword lispFunc         defun                  multiple-value-list           tailp
syn keyword lispFunc         defvar                  multiple-value-prog1           tan
syn keyword lispFunc         delete                  multiple-value-seteq           tanh
syn keyword lispFunc         delete-duplicates          multiple-value-setq           tenth
syn keyword lispFunc         delete-file              multiple-values-limit           terpri
syn keyword lispFunc         delete-if              name-char               the
syn keyword lispFunc         delete-if-not              namestring               third
syn keyword lispFunc         delete-package              nbutlast               throw
syn keyword lispFunc         denominator              nconc                   time
syn keyword lispFunc         deposit-field              next-method-p               trace
syn keyword lispFunc         describe              nil                   translate-logical-pathname
syn keyword lispFunc         describe-object          nintersection               translate-pathname
syn keyword lispFunc         destructuring-bind          ninth                   tree-equal
syn keyword lispFunc         digit-char              no-applicable-method           truename
syn keyword lispFunc         digit-char-p              no-next-method           truncase
syn keyword lispFunc         directory              not                   truncate
syn keyword lispFunc         directory-namestring          notany               two-way-stream
syn keyword lispFunc         disassemble              notevery               two-way-stream-input-stream
syn keyword lispFunc         division-by-zero          notinline               two-way-stream-output-stream
syn keyword lispFunc         do                  nreconc               type
syn keyword lispFunc         do*                  nreverse               type-error
syn keyword lispFunc         do-all-symbols              nset-difference           type-error-datum
syn keyword lispFunc         do-exeternal-symbols          nset-exclusive-or           type-error-expected-type
syn keyword lispFunc         do-external-symbols          nstring               type-of
syn keyword lispFunc         do-symbols              nstring-capitalize           typecase
syn keyword lispFunc         documentation              nstring-downcase           typep
syn keyword lispFunc         dolist                  nstring-upcase           unbound-slot
syn keyword lispFunc         dotimes              nsublis               unbound-slot-instance
syn keyword lispFunc         double-float              nsubst               unbound-variable
syn keyword lispFunc         double-float-epsilon          nsubst-if               undefined-function
syn keyword lispFunc         double-float-negative-epsilon      nsubst-if-not               unexport
syn keyword lispFunc         dpb                  nsubstitute               unintern
syn keyword lispFunc         dribble              nsubstitute-if           union
syn keyword lispFunc         dynamic-extent              nsubstitute-if-not           unless
syn keyword lispFunc         ecase                  nth                   unread
syn keyword lispFunc         echo-stream              nth-value               unread-char
syn keyword lispFunc         echo-stream-input-stream      nthcdr               unsigned-byte
syn keyword lispFunc         echo-stream-output-stream      null                   untrace
syn keyword lispFunc         ed                  number               unuse-package
syn keyword lispFunc         eighth                  numberp               unwind-protect
syn keyword lispFunc         elt                  numerator               update-instance-for-different-class
syn keyword lispFunc         encode-universal-time          nunion               update-instance-for-redefined-class
syn keyword lispFunc         end-of-file              oddp                   upgraded-array-element-type
syn keyword lispFunc         endp                  open                   upgraded-complex-part-type
syn keyword lispFunc         enough-namestring          open-stream-p               upper-case-p
syn keyword lispFunc         ensure-directories-exist      optimize               use-package
syn keyword lispFunc         ensure-generic-function      or                   use-value
syn keyword lispFunc         eq                  otherwise               user
syn keyword lispFunc         eql                  output-stream-p           user-homedir-pathname
syn keyword lispFunc         equal                  package               values
syn keyword lispFunc         equalp                  package-error               values-list
syn keyword lispFunc         error                  package-error-package           vector
syn keyword lispFunc         etypecase              package-name               vector-pop
syn keyword lispFunc         eval                  package-nicknames           vector-push
syn keyword lispFunc         eval-when              package-shadowing-symbols       vector-push-extend
syn keyword lispFunc         evalhook              package-use-list           vectorp
syn keyword lispFunc         evenp                  package-used-by-list           warn
syn keyword lispFunc         every                  packagep               warning
syn keyword lispFunc         exp                  pairlis               when
"syn keyword lispFunc         export                  parse-error               wild-pathname-p
syn keyword lispFunc         expt                  parse-integer               with-accessors
syn keyword lispFunc         extended-char              parse-namestring           with-compilation-unit
syn keyword lispFunc         fboundp              pathname               with-condition-restarts
syn keyword lispFunc         fceiling              pathname-device           with-hash-table-iterator
syn keyword lispFunc         fdefinition              pathname-directory           with-input-from-string
syn keyword lispFunc         ffloor                  pathname-host               with-open-file
syn keyword lispFunc         fifth                  pathname-match-p           with-open-stream
syn keyword lispFunc         file-author              pathname-name               with-output-to-string
syn keyword lispFunc         file-error              pathname-type               with-package-iterator
syn keyword lispFunc         file-error-pathname          pathname-version           with-simple-restart
syn keyword lispFunc         file-length              pathnamep               with-slots
syn keyword lispFunc         file-namestring          peek-char               with-standard-io-syntax
syn keyword lispFunc         file-position              phase                   write
syn keyword lispFunc         file-stream              pi                   write-byte
syn keyword lispFunc         file-string-length          plusp                   write-char
syn keyword lispFunc         file-write-date          pop                   write-line
syn keyword lispFunc         fill                  position               write-sequence
syn keyword lispFunc         fill-pointer              position-if               write-string
syn keyword lispFunc         find                  position-if-not           write-to-string
syn keyword lispFunc         find-all-symbols          pprint               y-or-n-p
syn keyword lispFunc         find-class              pprint-dispatch           yes-or-no-p
syn keyword lispFunc         find-if              pprint-exit-if-list-exhausted       zerop
syn keyword lispFunc         find-if-not              pprint-fill

syn match   lispFunc         "\<c[ad]\+r\>"


" Lisp Keywords (modifiers)
syn keyword lispKey         :abort                  :from-end               :overwrite
syn keyword lispKey         :adjustable              :gensym               :predicate
syn keyword lispKey         :append              :host                   :preserve-whitespace
syn keyword lispKey         :array                  :if-does-not-exist           :pretty
syn keyword lispKey         :base                  :if-exists               :print
syn keyword lispKey         :case                  :include               :print-function
syn keyword lispKey         :circle              :index               :probe
syn keyword lispKey         :conc-name              :inherited               :radix
syn keyword lispKey         :constructor              :initial-contents           :read-only
syn keyword lispKey         :copier              :initial-element           :rehash-size
syn keyword lispKey         :count                  :initial-offset           :rehash-threshold
syn keyword lispKey         :create              :initial-value           :rename
syn keyword lispKey         :default              :input               :rename-and-delete
syn keyword lispKey         :defaults              :internal               :size
syn keyword lispKey         :device              :io                   :start
syn keyword lispKey         :direction              :junk-allowed               :start1
syn keyword lispKey         :directory              :key                   :start2
syn keyword lispKey         :displaced-index-offset      :length               :stream
syn keyword lispKey         :displaced-to              :level               :supersede
syn keyword lispKey         :element-type              :name                   :test
syn keyword lispKey         :end                  :named               :test-not
syn keyword lispKey         :end1                  :new-version               :type
syn keyword lispKey         :end2                  :nicknames               :use
syn keyword lispKey         :error                  :output               :verbose
syn keyword lispKey         :escape              :output-file               :version
syn keyword lispKey         :external

" Standard Lisp Variables
syn keyword lispVar         *applyhook*              *load-pathname*           *print-pprint-dispatch*
syn keyword lispVar         *break-on-signals*          *load-print*               *print-pprint-dispatch*
syn keyword lispVar         *break-on-signals*          *load-truename*           *print-pretty*
syn keyword lispVar         *break-on-warnings*          *load-verbose*           *print-radix*
syn keyword lispVar         *compile-file-pathname*      *macroexpand-hook*           *print-readably*
syn keyword lispVar         *compile-file-pathname*      *modules*               *print-right-margin*
syn keyword lispVar         *compile-file-truename*      *package*               *print-right-margin*
syn keyword lispVar         *compile-file-truename*      *print-array*               *query-io*
syn keyword lispVar         *compile-print*          *print-base*               *random-state*
syn keyword lispVar         *compile-verbose*          *print-case*               *read-base*
syn keyword lispVar         *compile-verbose*          *print-circle*           *read-default-float-format*
syn keyword lispVar         *debug-io*              *print-escape*           *read-eval*
syn keyword lispVar         *debugger-hook*          *print-gensym*           *read-suppress*
syn keyword lispVar         *default-pathname-defaults*      *print-length*           *readtable*
syn keyword lispVar         *error-output*              *print-level*               *standard-input*
syn keyword lispVar         *evalhook*              *print-lines*               *standard-output*
syn keyword lispVar         *features*              *print-miser-width*           *terminal-io*
syn keyword lispVar         *gensym-counter*          *print-miser-width*           *trace-output*

" Strings
syn region             lispString              start=+"+ skip=+\\\\\|\\"+ end=+"+
if exists("lisp_instring")
 syn region             lispInString              keepend matchgroup=Delimiter start=+"(+rs=s+1 skip=+|.\{-}|+ matchgroup=Delimiter end=+)"+ contains=@lispListCluster,lispInStringString
 syn region             lispInStringString          start=+\\"+ skip=+\\\\+ end=+\\"+ contained
endif

" Shared with Xlisp, Declarations, Macros, Functions
syn keyword lispDecl         defmacro              do-all-symbols           labels
syn keyword lispDecl         defsetf              do-external-symbols           let
syn keyword lispDecl         deftype              do-symbols               locally
syn keyword lispDecl         defun                  dotimes               macrolet
syn keyword lispDecl         do*                  flet                   multiple-value-bind

" Numbers: supporting integers and floating point numbers
syn match lispNumber         "-\=\(\.\d\+\|\d\+\(\.\d*\)\=\)\(e[-+]\=\d\+\)\="

syn match lispSpecial         "\*[a-zA-Z_][a-zA-Z_0-9-]*\*"
syn match lispSpecial         !#|[^()'`,"; \t]\+|#!
syn match lispSpecial         !#x[0-9a-fA-F]\+!
syn match lispSpecial         !#o[0-7]\+!
syn match lispSpecial         !#b[01]\+!
syn match lispSpecial         !#\\[ -\~]!
syn match lispSpecial         !#[':][^()'`,"; \t]\+!
syn match lispSpecial         !#([^()'`,"; \t]\+)!

syn match lispConcat         "\s\.\s"
syn match lispParenError     ")"

" Comments
syn cluster lispCommentGroup     contains=lispTodo,@Spell
syn match   lispComment         ";.*$"                  contains=@lispCommentGroup
syn region  lispCommentRegion     start="#|" end="|#"          contains=lispCommentRegion,@lispCommentGroup
syn case ignore
syn keyword lispTodo         contained              combak               combak:                todo                 todo:
syn case match

" synchronization
syn sync lines=100

" gambit commands
syn case ignore
syn keyword gambitCommand abort blayer break
syn keyword gambitCommand cad check coordinate
syn keyword gambitCommand debug default degui do
syn keyword gambitCommand edge else end enddo
syn keyword gambitCommand facet filterparameters
syn keyword gambitCommand fog gcleanup graphics
syn keyword gambitCommand group hardcopy identifier
syn keyword gambitCommand if import label list
syn keyword gambitCommand macro macrorun model
syn keyword gambitCommand next object parameter
syn keyword gambitCommand physics plot readfile
syn keyword gambitCommand redo repair reset runsolver
syn keyword gambitCommand save sfunction sleep solver
syn keyword gambitCommand system tempfile timer
syn keyword gambitCommand turbo undo unit vertex
syn keyword gambitCommand volume window xyplot
syn keyword gambitCommand endif export face

syn match gambitComment !^/.*$!

syn match gambitVar     /$[A-Za-z][A-Za-z0-9_]*/
"syn match gambitVar     /$[A-Za-z][A-Za-z0-9_]*/he=e-1

syn keyword gambitSubCommand create mesh copy align
syn keyword gambitSubCommand uns btype ctype
syn keyword gambitSubCommand straight arc wireframe
syn keyword gambitSubCommand intervals coordinates
syn keyword gambitSubCommand open write move translation
syn keyword gambitSubCommand split to offset modify
syn keyword gambitSubCommand add connected angle circle
syn keyword gambitSubCommand select edgeints
syn keyword gambitSubCommand center2points


syn keyword gambitDecl declare

syn keyword gambitFunc STRFMT
syn keyword gambitFunc PARA INIT INCR COND
syn keyword gambitFunc le

" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_lisp_syntax_inits")
  if version < 508
    let did_lisp_syntax_inits = 1
    command -nargs=+ HiLink hi link <args>
  else
    command -nargs=+ HiLink hi def link <args>
  endif

"  HiLink lispCommentRegion     lispComment
"  HiLink lispAtomNmbr         lispNumber
"  HiLink lispAtomMark         lispMark
"  HiLink lispInStringString     lispString


"  HiLink lispAtom         Identifier
"  HiLink lispAtomBarSymbol     Special
"  HiLink lispBarSymbol         Special
"  HiLink lispComment         Comment
"  HiLink lispConcat         Statement
"  HiLink lispDecl         Statement
"  HiLink lispFunc         Statement
"  HiLink lispKey         Type
"  HiLink lispMark         Delimiter
  HiLink lispNumber         Number
"  HiLink lispParenError         Error
"  HiLink lispSpecial         Type
  HiLink lispString         String
"  HiLink lispTodo         Todo
"  HiLink lispVar         Statement

  HiLink gambitCommand Identifier
  HiLink gambitComment Comment
  HiLink gambitVar     Statement

  HiLink gambitSubCommand Type

  HiLink gambitDecl Statement

  HiLink gambitFunc Special
  delcommand HiLink
endif

let b:current_syntax = "gambit"

" vim: ts=8 nowrap
